/**
 * 用户认证状态管理工具
 * @description 提供用户登录状态管理、用户信息存储、记住我功能等认证相关功能
 * @author 系统开发团队
 * @version 1.0.0
 */

// ==================== 用户认证相关函数 ====================

/**
 * 检查用户是否已登录
 * @description 检查localStorage和sessionStorage中的登录状态，支持"记住我"功能
 * @returns {boolean} 用户是否已登录
 * @example
 * if (isLoggedIn()) {
 *   console.log('用户已登录')
 * } else {
 *   console.log('用户未登录')
 * }
 */
export const isLoggedIn = (): boolean => {
  // 优先检查localStorage（记住我的情况）
  let loginStatus = localStorage.getItem('isLoggedIn')
  let userInfo = localStorage.getItem('userInfo')

  // 如果localStorage中没有，检查sessionStorage（未记住我的情况）
  if (!loginStatus || !userInfo) {
    loginStatus = sessionStorage.getItem('isLoggedIn')
    userInfo = sessionStorage.getItem('userInfo')
  }

  return loginStatus === 'true' && !!userInfo
}

/**
 * 获取用户信息
 * @description 从localStorage或sessionStorage中获取用户信息
 * @returns {object | null} 用户信息对象，如果未登录则返回null
 * @example
 * const userInfo = getUserInfo()
 * if (userInfo) {
 *   console.log('用户名:', userInfo.username)
 * }
 */
export const getUserInfo = () => {
  // 优先从localStorage获取（记住我的情况）
  let userInfo = localStorage.getItem('userInfo')

  // 如果localStorage中没有，从sessionStorage获取（未记住我的情况）
  if (!userInfo) {
    userInfo = sessionStorage.getItem('userInfo')
  }

  return userInfo ? JSON.parse(userInfo) : null
}

/**
 * 设置登录状态
 * @description 根据是否选择"记住我"来决定使用localStorage还是sessionStorage存储登录信息
 * @param {object} userInfo 用户信息对象
 * @param {boolean} rememberMe 是否记住登录状态，默认为false
 * @example
 * setLoginStatus({ username: 'admin', email: 'admin@example.com' }, true)
 */
export const setLoginStatus = (userInfo: any, rememberMe: boolean = false) => {
  if (rememberMe) {
    // 如果选择记住我，使用localStorage（持久化存储）
    localStorage.setItem('isLoggedIn', 'true')
    localStorage.setItem('userInfo', JSON.stringify(userInfo))
    localStorage.setItem('rememberMe', 'true')
  } else {
    // 如果没有选择记住我，使用sessionStorage（会话存储，关闭浏览器后清除）
    sessionStorage.setItem('isLoggedIn', 'true')
    sessionStorage.setItem('userInfo', JSON.stringify(userInfo))
    sessionStorage.setItem('rememberMe', 'false')
  }
}

/**
 * 清除登录状态
 * @description 清除localStorage和sessionStorage中的所有登录相关信息
 * @example
 * clearLoginStatus()
 */
export const clearLoginStatus = () => {
  // 清除localStorage中的登录信息
  localStorage.removeItem('isLoggedIn')
  localStorage.removeItem('userInfo')
  localStorage.removeItem('rememberMe')

  // 清除sessionStorage中的登录信息
  sessionStorage.removeItem('isLoggedIn')
  sessionStorage.removeItem('userInfo')
  sessionStorage.removeItem('rememberMe')
}

/**
 * 用户登录
 * @description 设置用户登录状态，内部调用setLoginStatus
 * @param {object} userInfo 用户信息对象
 * @param {boolean} rememberMe 是否记住登录状态，默认为false
 * @example
 * login({ username: 'admin', email: 'admin@example.com' }, true)
 */
export const login = (userInfo: any, rememberMe: boolean = false) => {
  setLoginStatus(userInfo, rememberMe)
}

/**
 * 用户登出
 * @description 清除用户登录状态，内部调用clearLoginStatus
 * @example
 * logout()
 */
export const logout = () => {
  clearLoginStatus()
}

// ==================== 管理后台认证相关函数 ====================

/**
 * 检查管理员是否已登录
 * @description 检查localStorage中是否存在管理员token和用户信息
 * @returns {boolean} 管理员是否已登录
 * @example
 * if (isAdminLoggedIn()) {
 *   console.log('管理员已登录')
 * } else {
 *   console.log('管理员未登录')
 * }
 */
export const isAdminLoggedIn = (): boolean => {
  const adminToken = localStorage.getItem('adminToken')
  const adminUser = localStorage.getItem('adminUser')
  return !!adminToken && !!adminUser
}

/**
 * 获取管理员信息
 * @description 从localStorage中获取管理员用户信息
 * @returns {object | null} 管理员信息对象，如果未登录则返回null
 * @example
 * const adminUser = getAdminUser()
 * if (adminUser) {
 *   console.log('管理员用户名:', adminUser.username)
 * }
 */
export const getAdminUser = () => {
  const adminUser = localStorage.getItem('adminUser')
  return adminUser ? JSON.parse(adminUser) : null
}

/**
 * 设置管理员登录状态
 * @description 将管理员token和用户信息存储到localStorage中
 * @param {object} userInfo 管理员用户信息对象
 * @param {string} token 管理员认证token
 * @example
 * setAdminLoginStatus({ username: 'admin', role: 'super' }, 'admin-token-123')
 */
export const setAdminLoginStatus = (userInfo: any, token: string) => {
  localStorage.setItem('adminToken', token)
  localStorage.setItem('adminUser', JSON.stringify(userInfo))
}

/**
 * 清除管理员登录状态
 * @description 清除localStorage中的管理员登录相关信息
 * @example
 * clearAdminLoginStatus()
 */
export const clearAdminLoginStatus = () => {
  localStorage.removeItem('adminToken')
  localStorage.removeItem('adminUser')
  localStorage.removeItem('rememberMe')
}

/**
 * 管理员登录
 * @description 设置管理员登录状态，内部调用setAdminLoginStatus
 * @param {object} userInfo 管理员用户信息对象
 * @param {string} token 管理员认证token
 * @example
 * adminLogin({ username: 'admin', role: 'super' }, 'admin-token-123')
 */
export const adminLogin = (userInfo: any, token: string) => {
  setAdminLoginStatus(userInfo, token)
}

/**
 * 管理员登出
 * @description 清除管理员登录状态，内部调用clearAdminLoginStatus
 * @example
 * adminLogout()
 */
export const adminLogout = () => {
  clearAdminLoginStatus()
} 